package com.xiaoxu.rental.util;

import lombok.Data;
import lombok.experimental.Accessors;

@Data
@Accessors(chain = true)
public class Result<T> {
    private Integer code;
    private String message;
    private Boolean success;
    private T data;

    //私有化构造防止
    private Result() {
    }


    /**
     * 创建一个表示操作成功的 Result 对象。
     *
     *
     */
    public static <T> Result<T> success() {
        return new Result<T>()
                .setSuccess(true)
                .setCode(ResultCode.SUCCESS)
                .setMessage("操作成功");
    }

    /**
     * 创建一个表示操作成功的Result对象。
     *
     * @param data 成功操作后返回的数据。
     * @param <T> 数据的泛型类型，允许Result对象返回任意类型的數據。
     * @return 一个Result对象，表示操作成功，包含成功标志、状态码、成功消息和操作返回的数据。
     */

    public static<T> Result<T> success(T data){
        // 初始化Result对象，并设置成功状态、状态码、成功消息和返回数据。
        return new Result<T>()
                .setSuccess(true)
                .setCode(ResultCode.SUCCESS)
                .setMessage("操作成功")
                .setData(data);
    }

    /**
     * 创建一个表示操作失败的结果对象。
     * 该方法用于快速构建一个结果对象，指示某个操作失败。它设置了失败的标记，
     * 错误代码和一个通用的错误信息。这样的设计使得在需要返回失败结果时，能够
     * 通过一个简短的方法调用完成，而不是手动设置每个属性。
     *
     * @param <T> 结果数据的泛型类型，允许结果承载任意类型的数据显示。
     * @return 返回一个设置好的表示失败的结果对象。
     */
    public static<T> Result<T> fail(){
        return new Result<T>()
                .setSuccess(false)
                .setCode(ResultCode.ERROR)
                .setMessage("操作失败");
    }

}
